package com.freeheart.aop;


import org.springframework.util.CollectionUtils;

import java.util.Set;
import java.util.stream.Collectors;

/**
 * 操作AOP的工具类
 *
 * @author: EmperorHeart
 * @date: 2025/4/4 20:45
 * @description
 */
public class AopOperationUtils {

    /**
     * 私有构造：标准工具类
     */
    private AopOperationUtils() {
    }

    /**
     * 给定包名集合，生成AspectJ的PointCut表达式
     *
     * @param basePackages 包集合
     * @return AspectJ的PointCut表达式
     */
    public static String packages2AspectJPointCutExpression(Set<String> basePackages) {
        if (CollectionUtils.isEmpty(basePackages)) {
            throw new IllegalArgumentException("包名集合不允许为空");
        }
        return basePackages.stream()
                .map(s -> String.format("execution(public * %s..*(..))", s))
                .collect(Collectors.joining(" || "));
    }
}
